Java Technologies উদাহরণ সহ Caching Implementation গাইড ও নোট

283

Spring Boot অ্যাপ্লিকেশনে ক্যাশিং (Caching) ব্যবহার করা হলে অ্যাপ্লিকেশন দ্রুততর হতে পারে, বিশেষ করে যখন একাধিক বার একই তথ্য ডেটাবেস বা অন্যান্য সিস্টেম থেকে লোড করা হয়। ক্যাশিং ডেটাকে অস্থায়ীভাবে সঞ্চিত করে রাখে, ফলে সেই তথ্যটি পরবর্তী রিকোয়েস্টে দ্রুত পাওয়া যায়। Spring Boot ক্যাশিং সমর্থন করে এবং বিভিন্ন ক্যাশিং স্টোর (যেমন, EhCache, Redis, বা ইন-মেমরি ক্যাশ) ব্যবহার করে ক্যাশিং পরিচালনা করা যায়।

এখানে Spring Boot এ ক্যাশিং ব্যবহার করার উদাহরণ দেওয়া হয়েছে।


1. প্রয়োজনীয় ডিপেনডেন্সি ইনস্টল করা

Spring Boot ক্যাশিং ব্যবহার করতে হলে প্রথমে spring-boot-starter-cache ডিপেনডেন্সি আপনার pom.xml ফাইলে যোগ করতে হবে।

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Cache -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

    <!-- EhCache (optional, if using EhCache) -->
    <dependency>
        <groupId>org.ehcache</groupId>
        <artifactId>ehcache</artifactId>
    </dependency>
</dependencies>

এখানে, spring-boot-starter-cache ডিপেনডেন্সিটি ক্যাশিং ফিচারটি সক্রিয় করবে এবং ehcache ডিপেনডেন্সি শুধু যদি আপনি EhCache ব্যবহার করতে চান।


2. ক্যাশিং কনফিগারেশন

Spring Boot অ্যাপ্লিকেশনে ক্যাশিং সক্ষম করতে @EnableCaching অ্যানোটেশন ব্যবহার করা হয়। এই অ্যানোটেশনটি Spring Boot কে বলে যে অ্যাপ্লিকেশনটি ক্যাশিং ব্যবহার করবে।

2.1 ক্যাশিং কনফিগারেশন

package com.example.helloworld.config;

import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableCaching
public class CacheConfig {
}

এখানে, @EnableCaching অ্যানোটেশন Spring Boot কে ক্যাশিং সক্রিয় করতে বলে, এবং CacheConfig ক্লাসটি একটি কনফিগারেশন ক্লাস হিসেবে কাজ করে।


3. ক্যাশিং ব্যবহার করা

Spring Boot এ ক্যাশিং ব্যবহার করতে হলে, @Cacheable অ্যানোটেশন ব্যবহার করা হয়। এটি ক্যাশে ফলাফল রাখতে সাহায্য করে, যাতে একই রিকোয়েস্ট পরবর্তীতে ক্যাশ থেকে রিটার্ন করা যায়, এবং আবার একই ডেটাবেস বা প্রসেসিং করা না লাগে।

3.1 ক্যাশিং ব্যবহার করে Service ক্লাস তৈরি করা

ধরা যাক, আমাদের একটি UserService ক্লাস আছে, যেখানে ইউজার তথ্য ডেটাবেস থেকে ফেচ করা হয়। আমরা এই মেথডে @Cacheable অ্যানোটেশন ব্যবহার করব।

package com.example.helloworld.service;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Cacheable("users")
    public String getUserInfo(Long userId) {
        // এখানে ডেটাবেস কল বা দীর্ঘ প্রসেসিং হতে পারে
        simulateSlowService();
        return "User Info for ID " + userId;
    }

    // দীর্ঘ প্রসেসিং সিমুলেট করা
    private void simulateSlowService() {
        try {
            Thread.sleep(3000L); // 3 সেকেন্ড স্লিপ
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

এখানে, @Cacheable("users") অ্যানোটেশনটি বলে যে getUserInfo মেথডের ফলাফল ক্যাশে সেভ হবে, এবং পরবর্তীতে একই userId দিয়ে এই মেথডটি কল করলে ক্যাশ থেকে ফলাফল পাওয়া যাবে। users ক্যাশ নামক একটি ক্যাশ ব্যবহার করা হবে।


4. ক্যাশ ম্যানেজমেন্ট

Spring Boot অ্যাপ্লিকেশন কনফিগারেশনে ক্যাশ স্টোর এবং ক্যাশ প্রোপার্টিজ সেট করা যেতে পারে। যদি আপনি EhCache ব্যবহার করতে চান, তাহলে একটি কনফিগারেশন ফাইল তৈরি করতে হবে।

4.1 EhCache কনফিগারেশন

<!-- src/main/resources/ehcache.xml -->
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.ehcache.org/ehcache.xml http://www.ehcache.org/schema/ehcache-core-2.10.xsd">

    <cache alias="users" 
           maxEntriesLocalHeap="1000"
           eternal="false"
           timeToLiveSeconds="600" />
</ehcache>

এখানে, users ক্যাশে 1000টি এন্ট্রি সঞ্চিত হবে এবং প্রতিটি এন্ট্রি 600 সেকেন্ড (10 মিনিট) পরে এক্সপায়ার হবে।


5. ক্যাশিং ব্যবহার করে Controller তৈরি করা

এখন, আমরা একটি Controller ক্লাস তৈরি করব, যা UserService এর getUserInfo মেথড কল করবে।

5.1 Controller উদাহরণ

package com.example.helloworld.controller;

import com.example.helloworld.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/user/{id}")
    public String getUserInfo(@PathVariable Long id) {
        return userService.getUserInfo(id);
    }
}

এখানে, /user/{id} এ GET রিকোয়েস্ট আসলে, getUserInfo() মেথড কল হবে এবং প্রথমবারে এটি 3 সেকেন্ড সময় নিবে (কারণ সিমুলেটেড স্লো সার্ভিস)। তবে পরবর্তীতে একই id দিয়ে কল করলে, ক্যাশ থেকে সরাসরি ফলাফল পাওয়া যাবে এবং সময় লাগবে না।


6. ক্যাশ থেকে ডেটা মুছে ফেলা

যখন কোনো ডেটা পরিবর্তন হয়, তখন সেই ডেটা ক্যাশ থেকে মুছে ফেলার প্রয়োজন হতে পারে। এই কাজটি করতে @CacheEvict অ্যানোটেশন ব্যবহার করা হয়।

6.1 ক্যাশ মুছে ফেলার উদাহরণ

package com.example.helloworld.service;

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @CacheEvict(value = "users", allEntries = true)
    public void evictAllUsersFromCache() {
        System.out.println("All users removed from cache");
    }
}

এখানে, @CacheEvict অ্যানোটেশন ব্যবহার করে users ক্যাশ থেকে সব এন্ট্রি মুছে ফেলা হচ্ছে। allEntries = true নিশ্চিত করে যে সমস্ত এন্ট্রি ক্যাশ থেকে সরানো হবে।


7. ক্যাশ স্ট্যাটাস চেক করা

Spring Boot অ্যাপ্লিকেশন চলাকালে ক্যাশ স্ট্যাটাস চেক করতে, Spring Boot অ্যাপ্লিকেশন লগ ব্যবহার করতে পারেন অথবা আপনি JMX (Java Management Extensions) ব্যবহার করে ক্যাশ স্ট্যাটাস মনিটর করতে পারবেন।


সারাংশ

Spring Boot এ ক্যাশিং ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটি দ্রুততর এবং দক্ষ করা যায়। @EnableCaching অ্যানোটেশন ক্যাশিং সক্রিয় করে এবং @Cacheable ব্যবহার করে ডেটা ক্যাশে রাখা হয়। ক্যাশে ডেটা থাকলে পরবর্তী রিকোয়েস্টে দ্রুত ফলাফল পাওয়া যায়। Spring Boot ক্যাশিং সমর্থন করে বিভিন্ন ক্যাশ স্টোর যেমন EhCache, Redis ইত্যাদি। @CacheEvict অ্যানোটেশন ব্যবহার করে ক্যাশ থেকে ডেটা মুছে ফেলা যায়। Spring Boot ক্যাশিং একটি শক্তিশালী বৈশিষ্ট্য যা আপনার অ্যাপ্লিকেশনকে স্কেলেবল এবং দ্রুত করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...